package com.example.administrator.kotlintutorial.`class`

/**
 * Created by chensuilun on 2019/2/21.
 */

//public final class SingleTon {
//    public static final Companion Companion = new Companion();
//
//    public static final class Companion {
//        private Companion() {
//        }
//
//        public /* synthetic */ Companion(DefaultConstructorMarker $constructor_marker) {
//            this();
//        }
//
//        @NotNull
//        public final SingleTon getInstance() {
//            return Holder.INSTANCE.getInstance();
//        }
//    }
//
//    private static final class Holder {
//        public static final Holder INSTANCE = new Holder();
//        @NotNull
//        private static final SingleTon instance = new SingleTon();
//
//        private Holder() {
//        }
//
//        @NotNull
//        public final SingleTon getInstance() {
//            return instance;
//        }
//    }
//
//    private SingleTon() {
//    }
//
//    public /* synthetic */ SingleTon(DefaultConstructorMarker $constructor_marker) {
//        this();
//    }
//}
class SingleTon private constructor() {
    // 1.伴生对象实际上生成的是静态内部类，并且使用 public  static final 字段来引用其实例
    companion object {
        fun getInstance(): SingleTon {
            return Holder.instance
        }
    }

    //内部类也会生成静态内部类
    private object Holder {
        val instance = SingleTon()
    }
}


//public final class SingleTonKt {
//    public static final void main() {
//        SingleTon.Companion.getInstance();
//    }
//}
fun main() {
    SingleTon.getInstance()
}